import { Request, Response, NextFunction } from 'express'
import jwt from 'jsonwebtoken'
import { logger } from '../services/logger'

export const auth = (req: Request, res: Response, next: NextFunction) => {
    try {
        const authHeader = req.headers.authorization
        if (!authHeader) {
            logger.warn('No authorization header')
            return res.status(401).json({ error: '未提供认证令牌' })
        }

        const token = authHeader.replace('Bearer ', '')
        const decoded = jwt.verify(token, process.env.JWT_SECRET || 'your-secret-key')

        req.user = decoded as { id: string; email: string; role: string }
        next()
    } catch (error) {
        logger.error('Auth middleware error:', error)
        if (error instanceof jwt.JsonWebTokenError) {
            return res.status(401).json({ error: '无效的认证令牌' })
        }
        res.status(500).json({ error: '认证失败' })
    }
}

// 角色验证中间件
export const roleAuth = (roles: string[]) => {
    return (req: Request, res: Response, next: NextFunction) => {
        // 由于前面的 auth 中间件已经确保了 user 存在，这里可以直接使用
        if (!roles.includes(req.user!.role)) {
            return res.status(403).json({ error: '无权访问' })
        }
        next()
    }
}

// 管理员权限检查
export const adminAuth = (req: Request, res: Response, next: NextFunction) => {
    // 由于前面的 auth 中间件已经确保了 user 存在，这里可以直接使用
    if (req.user!.role !== 'admin') {
        return res.status(403).json({ error: '需要管理员权限' })
    }
    next()
}